1. Field of the Invention
This invention relates to data storage and more particularly relates to storing data using a progressive RAID system.
2. Description of the Related Art
A redundant array of independent drives (“RAID”) can be structured in many ways to achieve various goals. As described herein, a drive is a mass storage device for data. A drive, or storage device, may be a solid-state storage, a hard disk drive (“HDD”), a tape drive, an optical drive, or any other mass storage device known to those of skill in the art. In one embodiment, a drive comprises a portion of a mass storage device accessed as a virtual volume. In another embodiment, a drive includes two or more data storage devices accessible together as a virtual volume and configured in a storage area network (“SAN”), as a RAID, as just a bunch of disks/drives (“JBOD”), etc. Typically, a drive is accessed as a single unit or virtual volume through a storage controller. In a preferred embodiment, the storage controller comprises a solid-state storage controller. One of skill in the art will recognize other forms of a drive in the form of a mass storage device that may be configured in a RAID. In the embodiments described herein, a drive and a storage device are used interchangeably.
Traditionally, the various RAID configurations are called RAID levels. One basic RAID configuration is RAID level 1 which creates a minor copy of a storage device. An advantage of RAID 1 is that a complete copy of data on one or more storage devices is also available on a mirror copy of the one or more storage devices so that reading the data on the primary drives or mirrored drives is relatively fast. RAID 1 also provides a backup copy of data in case of a failure in the primary storage devices. A disadvantage of RAID 1 is that writes are relatively slow because written data must be written twice.
Another traditional RAID configuration is RAID level 0. In RAID 0, data written to the RAID is divided into N data segments corresponding to N storage devices in a set of storage devices. The N data segments form a “stripe.” By striping data across multiple storage devices, performance is enhanced because the storage devices can work in parallel to store the N data segments faster than a single storage device can save data comprising the N data segments. Reading data is relatively slow, however, because is data may be spread over multiple storage devices and access time of multiple storage devices is typically slower than reading data from one storage device containing all of the desired data. In addition, RAID 0 provides no failure protection.
A popular RAID configuration is RAID level 5 which includes striping of N data segments across N storage devices and storing a parity data segment on an N+1 storage device. RAID 5 offers failure tolerance because the RAID can tolerate a single failure of a storage device. For example, if a storage device fails, missing a data segment of a stripe can be created using the other available data segments and the parity data segment calculated specifically for the stripe. RAID 5 also typically uses less storage space than RAID 1 because each storage device of the RAIDed set of storage devices is not required to store a complete copy of the data, but only a data segment of a stripe or a parity data segment. RAID 5, like RAID 0, is relatively fast for writing data, but is relatively slow for reading data. Writing data for a typical traditional RAID 5 is slower than for RAID 0, however, because a parity data segment must be calculated for each stripe from the N data segments of the stripe.
Another popular RAID configuration is RAID level 6 which includes dual distributed parity. In RAID 6, two storage devices are assigned as parity-minor devices (e.g. 1602a, 1602b). Each parity data segment for a stripe is calculated separately so that losing any two storage devices in the storage device set is recoverable using the remaining, available data segments and/or parity data segments. RAID 6 has similar performance advantages and disadvantages as RAID 5.
Nested RAID may also be used to increase fault tolerance where high reliability is required. For example, two storage device sets, each configured as RAID 5, may be mirrored in a RAID 1 configuration. The resulting configuration may be called RAID 50. If RAID 6 is used for each mirrored set, the configuration may be called RAID 60. Nested RAID configurations typically have similar performance issues as the underlying RAID groups.